package com.lrh.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lrh.reggie.common.BaseContext;
import com.lrh.reggie.common.R;

import com.lrh.reggie.dto.OrdersDto;
import com.lrh.reggie.entity.Orders;
import com.lrh.reggie.service.OrdersService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 订单
 */

@Slf4j
@RestController
@RequestMapping("/order")
public class OrdersController {

    @Autowired
    private OrdersService ordersService;

    /**
     * 订单分页查询
     *
     * @param page
     * @param pageSize
     * @param number
     * @return
     */
    @GetMapping("/page")
    public R<Page> page(int page, int pageSize, Long number, String beginTime, String endTime) {
        log.info("page:{},pageSize:{},number:{}", page, pageSize, number);

        Page<Orders> allPage = ordersService.getAllPage(page, pageSize, number, beginTime, endTime);
        return R.success(allPage);
    }


//    /**
//     * 修改订单状态   自己写的有问题  原本写的是
//     public R<String> statusHandle(@RequestBody int status, Long id)
//    出现了下面的报错
//     *Optional int parameter 'status' is present but cannot be translated into a null value due to
//     being declared as a primitive type. Consider declaring it as object wrapper
//     for the corresponding primitive type.
//    可选的int参数“id”是存在的，但是由于声明为原始类型，所以不能被转换成空值。考虑将其声明为对应原语类型的对象包装器
//    就是你定义的某个方法的参数，但是这个参数是非必须的，系统会自动给这个字段赋值为null，但是你的字段类型为int，
//    int不能接收null值，所以会报如上的错误。解决办法就是使用包装类 Integer。
//   后来改成了下面的写法
//    public R<String> statusHandle(Integer status, Long id){
//    又出现了接收不到前端请求的JSON数据
//
//     * @param status
//     * @param id
//     * @return
//     */
//    @PutMapping
//    public R<String> statusHandle(@RequestBody Integer status, Long id){
//        log.info("status:{},id:{}",status,id);
//
//        ordersService.updateStatus(status,id);
//
//        return R.success("修改订单状态成功");
//    }

    /**
     * 修改订单状态   //前端的请求  {status: 4, id: "3"}   orders 表都有
     * @param orders
     * @return
     */
    @PutMapping
    public R<String> statusHandle(@RequestBody Orders orders) {

        if (ordersService.updateById(orders)) {
            return R.success("修改成功");
        }
        return R.error("修改失败");
    }

//    /**
//     * 修改订单状态   使用Map接受请求
//     */
//    @PutMapping
//    public R<String> orderStatusChange(@RequestBody Map<String,String> map){
//
//        String id = map.get("id");
//        Long orderId = Long.parseLong(id);//将接收到的id转为Long型
//        Integer status = Integer.parseInt(map.get("status"));//转为Integer型
//
//        if(orderId == null || status==null){
//            return R.error("传入信息非法");
//        }
//        Orders orders = ordersService.getById(orderId);//根据订单id查询订单数据
//        orders.setStatus(status);//修改订单对象里的数据
//        ordersService.updateById(orders);
//
//        return R.success("订单状态修改成功");
//
//    }


    /**
     * 个人信息页的订单查询
     * @param page
     * @param pageSize
     * @return
     */
    @GetMapping("/userPage")
    public R<Page<OrdersDto>> userPage(int page, int pageSize){
        log.info("page:{},pageSize:{}",page,pageSize);

        Page<OrdersDto> ordersDtoPage = ordersService.getPage(page, pageSize);

        return R.success(ordersDtoPage);
    }


    /**
     * 用户下单
     * @param orders
     * @return
     */
    @PostMapping("/submit")
    public R<String> submit(@RequestBody Orders orders){
        log.info("orders:{}",orders);

        ordersService.submit(orders);
        return R.success("下单成功");
    }


    /**
     * //客户端点击再来一单
     * @param orders
     * @return
     */
    @PostMapping("/again")
    public R<String> again(@RequestBody Orders orders){  //前端传的JSON数据就要用@RequestBody
        log.info("orders:{}",orders);
        ordersService.againOrder(orders);
        return R.success("操作成功");
    }


}
